const crypto = require("crypto")

class GlobalUtils {
  /**
   * 加密数据
   * @param data 原始数据
   * @param key 唯一密钥
   * @param algorithm 加密算法
   * @return hmac.digest('hex') 十六进制的加密密文
   */
  static enCryptData(data, key, algorithm) {
    // 采用哈希算法加密
    if (!crypto.getHashes().includes(algorithm)) {
      throw new Error('无效算法...')
    }
    // 加密处理
    const hmac = crypto.createHmac(algorithm, key)
    hmac.update(data)
    return hmac.digest('hex')
  }

  /**
   * 控制台输出日志
   * @param level 日志等级 {info < warning < error }
   * @param message 日志信息
   */
  static info(level, message) {
    // 默认前景色和背景色
    let color = 39
    let bgc = 49

    switch (level) {
      case 'info':
        color = 94 // 亮蓝色
        break
      case 'warning':
        color = 93 // 亮黄色
        break
      case 'error':
        color = 91 // 亮红色
        break
      default:
        break
    }
    console.log(`\x1b[${bgc};${color}m[${level}] ====> ${message}`)
  } 
}

module.exports = GlobalUtils